//
//  CSYGetUserInfoModel.swift
//  CSSinaMicroBlog_Test
//
//  Created by 姚彦兆 on 15/11/11.
//  Copyright © 2015年 姚彦兆. All rights reserved.
//

import UIKit

import AFNetworking

class CSYGetUserInfoModel: NSObject {

    //对外提供用户的信息便捷获取方法
    
    var userModel : CSYUserModel?
    
    var userToken : String? {
    
        return userModel?.access_token
    
    }
    
    var isLogin : Bool {
    
        return userModel?.access_token != nil
    
    }
    
    override init() {
        
        userModel = CSYUserModel.readUserPlist()
        
    }
    
    
}

extension CSYGetUserInfoModel {

    
    
    
    //使用AFN框架向网络发送请求
    
    //根据得到的CODE来获得用户的信息
    
    /**
    
    请求地址:https://api.weibo.com/oauth2/access_token
    
    HTTP请求方式
    POST
    
    请求参数 ----->
    
    必选                     类型及范围       说明
    
    client_id	true          string         申请应用时分配的AppKey。
    client_secret	true	  string         申请应用时分配的AppSecret。
    grant_type	true	      string         请求的类型，填写authorization_code
    
    grant_type为authorization_code时 ----->
    
    必选                     类型及范围       说明
    
    code	true              string         调用authorize获得的code值。
    redirect_uri	true      string         回调地址，需与注册应用里的回调地址一致。
    
    - parameter userCode: 授权请求得到的code串
    */

    
    func getUserInfoWithCode( code : String ,finishBlock : (errorMessage : NSError?) -> ()){
        

        
        let requestURL = "https://api.weibo.com/oauth2/access_token"
        
        let parameters : [String : AnyObject] = ["client_id" : client_id , "client_secret" : client_secret , "grant_type" : "authorization_code" , "code" : code , "redirect_uri" : redirect_uri]
        
        let AFN = AFHTTPSessionManager()
        
        AFN.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
        AFN.POST(requestURL, parameters: parameters, success: { (_, result) -> Void in
            
//            >>>>>>>SHOWRESULT>>>>>>>>{
//                "access_token" = "2.00fu7oCG0tFG7h324e19ff98oUkqTD";
//                "expires_in" = 157679999;
//                "remind_in" = 157679999;
//                uid = 5538369521;
//            }
            
                if let userInfo = result as? [String : AnyObject]{
            
                    let userModel : CSYUserModel = CSYUserModel(userInfo: userInfo)
        
                    self.getUserMessageWith(userModel, finishBlock: finishBlock)
                    
                }
            
            }) { (_, error) -> Void in
                
            print("ERRORMESSAGE:\(error)")
                
        }
    }
    
    func getUserMessageWith(userModel : CSYUserModel , finishBlock:(errorMessage : NSError?) -> ()){
        
        /**
        *
        参数名称                     类型及范围           说明
        source	            false   string              采用OAuth授权方式不需要此参数，其他授权方式为必填参数，数值为应用的AppKey。
        access_token	    false   string              采用OAuth授权方式为必填参数，其他授权方式不需要此参数，OAuth授权后获得。
        uid                 false	int64               需要查询的用户ID。
        */
        //Sina官方API --> 获取用户信息的URL请求地址() : https://api.weibo.com/2/users/show.json
     
        let urlSTR = "https://api.weibo.com/2/users/show.json"
        
        let paramaters : [String : AnyObject] = ["access_token" : userModel.access_token! , "uid" : userModel.uid!]
        
        let AFN = AFHTTPSessionManager()
        
        AFN.GET(urlSTR, parameters: paramaters, success: { (_, result) -> Void in
            
            if let result : [String : AnyObject] = result as? [String : AnyObject]{
            
                userModel.avatar_hd = result["avatar_hd"] as? String
                
                userModel.name = result["name"] as? String
            
                print("准备存储用户数据\(userModel)")
                
                userModel.saveUserAccount()
                
                finishBlock(errorMessage: nil)
                
            }
            
            }) { (_, error) -> Void in
                
                finishBlock(errorMessage: error)
                
        }
        
        
    }

}






















